/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.perutaxi.datos;

import com.perutaxi.entidades.eEmpresa;
import com.perutaxi.entidades.eUsuario;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 *
 * @author PeruTaxi
 */
public class dEmpresa implements Serializable {

    public static Date obtenerFechaActual() {
        Calendar calendario = Calendar.getInstance();
        return calendario.getTime();
    }

    public static eEmpresa inicializar() {
        eEmpresa empresa = new eEmpresa();
        empresa.setUsuario(new eUsuario());
        empresa.setRazonSocial("");
        empresa.setRuc("");
        empresa.setDireccionEmpresa("");
        empresa.setTelefonoEmpresa("");
        empresa.setEmailEmpresa("");
        empresa.setNroTrabajadores(0L);
        empresa.setNombres("");
        empresa.setApPaterno("");
        empresa.setApMaterno("");
        empresa.setDni("");
        empresa.setDireccion("");
        empresa.setEmailLaboral("");
        empresa.setEmailPersonal("");
        empresa.setTelefonoPersonal("");
        empresa.setCargo("");
        empresa.setEstado(Boolean.TRUE);
        empresa.setFechaCreacion(new Timestamp(obtenerFechaActual().getTime()));
        empresa.setImagen("");

        return empresa;
    }

    public static eEmpresa obtenerPorId(Long id) throws Exception {
        eEmpresa empresa = new eEmpresa();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM EMPRESA WHERE ID = " + id;
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                empresa.setId(rs.getLong(1));
                empresa.setUsuario(dUsuario.obtenerPorId(rs.getLong(2)));
                empresa.setRazonSocial(rs.getString(3));
                empresa.setRuc(rs.getString(4));
                empresa.setDireccionEmpresa(rs.getString(5));
                empresa.setTelefonoEmpresa(rs.getString(6));
                empresa.setEmailEmpresa(rs.getString(7));
                empresa.setNroTrabajadores(rs.getLong(8));
                empresa.setNombres(rs.getString(9));
                empresa.setApPaterno(rs.getString(10));
                empresa.setApMaterno(rs.getString(11));
                empresa.setDni(rs.getString(12));
                empresa.setDireccion(rs.getString(13));
                empresa.setEmailLaboral(rs.getString(14));
                empresa.setEmailPersonal(rs.getString(15));
                empresa.setCargo(rs.getString(16));
                empresa.setEstado(rs.getBoolean(17));
                empresa.setFechaCreacion(rs.getTimestamp(18));
                empresa.setImagen(rs.getString(19));
                empresa.setTelefonoPersonal(rs.getString(20));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return empresa;
    }

    public static eEmpresa obtenerPorIdUser(Long id) throws Exception {
        eEmpresa empresa = new eEmpresa();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM EMPRESA WHERE USUARIO = " + id;
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                empresa.setId(rs.getLong(1));
                empresa.setUsuario(dUsuario.obtenerPorId(rs.getLong(2)));
                empresa.setRazonSocial(rs.getString(3));
                empresa.setRuc(rs.getString(4));
                empresa.setDireccionEmpresa(rs.getString(5));
                empresa.setTelefonoEmpresa(rs.getString(6));
                empresa.setEmailEmpresa(rs.getString(7));
                empresa.setNroTrabajadores(rs.getLong(8));
                empresa.setNombres(rs.getString(9));
                empresa.setApPaterno(rs.getString(10));
                empresa.setApMaterno(rs.getString(11));
                empresa.setDni(rs.getString(12));
                empresa.setDireccion(rs.getString(13));
                empresa.setEmailLaboral(rs.getString(14));
                empresa.setEmailPersonal(rs.getString(15));
                empresa.setCargo(rs.getString(16));
                empresa.setEstado(rs.getBoolean(17));
                empresa.setFechaCreacion(rs.getTimestamp(18));
                empresa.setImagen(rs.getString(19));
                empresa.setTelefonoPersonal(rs.getString(20));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return empresa;
    }

    public static List<eEmpresa> obtenerTodos() throws Exception {
        List<eEmpresa> lista = new ArrayList<eEmpresa>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM EMPRESA";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eEmpresa ent = new eEmpresa();
                ent.setId(rs.getLong(1));
                ent.setUsuario(dUsuario.obtenerPorId(rs.getLong(2)));
                ent.setRazonSocial(rs.getString(3));
                ent.setRuc(rs.getString(4));
                ent.setDireccionEmpresa(rs.getString(5));
                ent.setTelefonoEmpresa(rs.getString(6));
                ent.setEmailEmpresa(rs.getString(7));
                ent.setNroTrabajadores(rs.getLong(8));
                ent.setNombres(rs.getString(9));
                ent.setApPaterno(rs.getString(10));
                ent.setApMaterno(rs.getString(11));
                ent.setDni(rs.getString(12));
                ent.setDireccion(rs.getString(13));
                ent.setEmailLaboral(rs.getString(14));
                ent.setEmailPersonal(rs.getString(15));
                ent.setCargo(rs.getString(16));
                ent.setEstado(rs.getBoolean(17));
                ent.setFechaCreacion(rs.getTimestamp(18));
                ent.setImagen(rs.getString(19));
                ent.setTelefonoPersonal(rs.getString(20));
                lista.add(ent);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static List<eEmpresa> obtenerEmpresa(eEmpresa empresa) throws Exception {
        List<eEmpresa> lista = new ArrayList<eEmpresa>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM EMPRESA WHERE ID = ID";
        if (empresa.getId() != null && !empresa.getId().equals(0L)) {
            query += " AND ID = " + empresa.getId();
        } else {
            if (empresa.getRuc() != null && empresa.getRuc().length() > 0) {
                query += " AND RUC LIKE '" + empresa.getRuc().toUpperCase() + "'";
            }
            if (empresa.getRazonSocial() != null && empresa.getRazonSocial().length() > 0) {
                query += " AND RAZON_SOCIAL LIKE '" + empresa.getRazonSocial().toUpperCase() + "'";
            }
            if (empresa.getEstado() != null) {
                if (empresa.getEstado()) {
                    query += " AND ESTADO = " + 1;
                } else {
                    query += " AND ESTADO = " + 0;
                }
            }
        }
        query += " ORDER BY ID DESC";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eEmpresa ent = new eEmpresa();
                ent.setId(rs.getLong(1));
                ent.setUsuario(dUsuario.obtenerPorId(rs.getLong(2)));
                ent.setRazonSocial(rs.getString(3));
                ent.setRuc(rs.getString(4));
                ent.setDireccionEmpresa(rs.getString(5));
                ent.setTelefonoEmpresa(rs.getString(6));
                ent.setEmailEmpresa(rs.getString(7));
                ent.setNroTrabajadores(rs.getLong(8));
                ent.setNombres(rs.getString(9));
                ent.setApPaterno(rs.getString(10));
                ent.setApMaterno(rs.getString(11));
                ent.setDni(rs.getString(12));
                ent.setDireccion(rs.getString(13));
                ent.setEmailLaboral(rs.getString(14));
                ent.setEmailPersonal(rs.getString(15));
                ent.setCargo(rs.getString(16));
                ent.setEstado(rs.getBoolean(17));
                ent.setFechaCreacion(rs.getTimestamp(18));
                ent.setImagen(rs.getString(19));
                ent.setTelefonoPersonal(rs.getString(20));
                lista.add(ent);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static boolean guardar(eEmpresa empresa) throws Exception {
        boolean retorno = true;
        Connection cnx = Conexion.getConexion();
        String query = "INSERT INTO EMPRESA VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        try {
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setLong(1, empresa.getId());
            ps.setLong(2, empresa.getUsuario().getId());
            ps.setString(3, empresa.getRazonSocial().toUpperCase());
            ps.setString(4, empresa.getRuc().toUpperCase());
            ps.setString(5, empresa.getDireccionEmpresa().toUpperCase());
            ps.setString(6, empresa.getTelefonoEmpresa().toUpperCase());
            ps.setString(7, empresa.getEmailEmpresa().toUpperCase());
            ps.setLong(8, empresa.getNroTrabajadores());
            ps.setString(9, empresa.getNombres().toUpperCase());
            ps.setString(10, empresa.getApPaterno().toUpperCase());
            ps.setString(11, empresa.getApMaterno().toUpperCase());
            ps.setString(12, empresa.getDni().toUpperCase());
            ps.setString(13, empresa.getDireccion().toUpperCase());
            ps.setString(14, empresa.getEmailLaboral().toUpperCase());
            ps.setString(15, empresa.getEmailPersonal().toUpperCase());
            ps.setString(16, empresa.getCargo().toUpperCase());
            ps.setBoolean(17, empresa.getEstado());
            ps.setTimestamp(18, empresa.getFechaCreacion());
            ps.setString(19, empresa.getImagen());
            ps.setString(20, empresa.getTelefonoPersonal().toUpperCase());
            ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            cnx.close();
        }

        return retorno;
    }

    public static boolean actualizar(eEmpresa empresa) throws Exception {
        boolean retorno = true;
        Connection cnx = Conexion.getConexion();
        String query = "UPDATE EMPRESA SET USUARIO = ?, RAZON_SOCIAL = ?, RUC = ?, DIRECCION_EMPRESA = ?, TELEFONO_EMPRESA = ?, EMAIL_EMPRESA = ?, ";
        query += "NRO_TRABAJADORES = ?, NOMBRES = ?, AP_PATERNO = ?, AP_MATERNO = ?, DNI = ?, DIRECCION = ?, EMAIL_LABORAL = ?, EMAIL_PERSONAL = ?, ";
        query += "CARGO = ?, ESTADO = ?, IMAGEN = ?, TELEFONO_PERSONAL = ? WHERE ID = ?";
        try {
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setLong(1, empresa.getUsuario().getId());
            ps.setString(2, empresa.getRazonSocial().toUpperCase());
            ps.setString(3, empresa.getRuc().toUpperCase());
            ps.setString(4, empresa.getDireccionEmpresa().toUpperCase());
            ps.setString(5, empresa.getTelefonoEmpresa().toUpperCase());
            ps.setString(6, empresa.getEmailEmpresa().toUpperCase());
            ps.setLong(7, empresa.getNroTrabajadores());
            ps.setString(8, empresa.getNombres().toUpperCase());
            ps.setString(9, empresa.getApPaterno().toUpperCase());
            ps.setString(10, empresa.getApMaterno().toUpperCase());
            ps.setString(11, empresa.getDni().toUpperCase());
            ps.setString(12, empresa.getDireccion().toUpperCase());
            ps.setString(13, empresa.getEmailLaboral().toUpperCase());
            ps.setString(14, empresa.getEmailPersonal().toUpperCase());
            ps.setString(15, empresa.getCargo().toUpperCase());
            ps.setBoolean(16, empresa.getEstado());
            ps.setString(17, empresa.getImagen());
            ps.setString(18, empresa.getTelefonoPersonal());
            ps.setLong(19, empresa.getId());
            ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            cnx.close();
        }

        return retorno;
    }
}
